package org.preconditions;

import static com.google.common.base.Preconditions.*;

/**
 * Hello world!
 *
 */
/**
 * 在Eclipse中静态导入方法： Window -> preferences -> Java 
 *   -> Editor ->
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        try {
        	testFunc("testString", new Integer(100), new Double(1.0));
        } catch (Exception e) {
        	e.printStackTrace();
        }
    }
    
    public static void testFunc(String str, Integer number, Double price) {
    	// 1. checkArgument(boolean) 检查boolean是否为true，用来检查传递给方法的参数 , IllegalArgumentException
    	checkArgument(str != null);
    	
    	// 2. checkNotNull(T) 检查value是否为null，该方法直接返回value，因此可以内嵌使用checkNotNull。NullPointerException
        //checkNotNull(null); // NullPointerException
    	checkNotNull(number);
    	
    	// 3. checkState(boolean) 用来检查对象的某些状态。 IllegalStateException
    	// checkState(false); // IllegalStateException
    	checkState(number != 0);
    	
    	// 4. checkElementIndex(int index, int size) 检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size *
    	// IndexOutOfBoundsException
    	//checkElementIndex(10, 5); // IndexOutOfBoundsException
    	checkElementIndex(4, 5);
    	
    	// 5. checkPositionIndex(int index, int size) 检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size *
    	// IndexOutOfBoundsException
    	// checkElementIndex(5, 5); // java.lang.IndexOutOfBoundsException: index (5) must be less than size (5)
    	checkPositionIndex(5, 5);
    	
    	// 6. checkPositionIndexes(int start, int end, int size) 检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效*
    	// IndexOutOfBoundsException
    	// checkPositionIndexes(2, 8, 7); // java.lang.IndexOutOfBoundsException: end index (8) must not be greater than size (7)
    	checkPositionIndexes(2, 7, 7);
    	checkPositionIndexes(2, 5, 7);
    }
}
